package algorithm7.leetcode.每日一题.YEAR2023.month7;

import org.junit.jupiter.api.Test;

import java.util.PriorityQueue;

/**
 * @Author: permission
 * @Date: 2023/7/4 1:01
 * @Version: 1.0
 * @ClassName: DAY20230704_LC2679
 * @Description:
 */
public class DAY20230704_LC2679 {

    public int matrixSum(int[][] nums) {
        return handle1(nums);
    }

    // 优先级队列（大根堆）
    private int handle1(int[][] nums) {
        int row = nums.length;
        int col = nums[0].length;
        int res = 0;
        PriorityQueue<Integer>[] pqs = new PriorityQueue[row];
        // 初始化
        for (int i = 0; i < row; i++) {
            pqs[i] = new PriorityQueue<>((a, b) -> b - a);
            for (int j = 0; j < col; j++) {
                pqs[i].offer(nums[i][j]);
            }
        }
        for (int j = 0; j < col; j++) {
            int max = 0;
            for (int i = 0; i < row; i++) {
                max = Math.max(max, pqs[i].poll());
            }
            res += max;
        }
        return res;
    }

/*

2679. 矩阵中的和
给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空：
    1.矩阵中每一行选取最大的一个数，并删除它。如果一行中有多个最大的数，选择任意一个并删除。
    2.在步骤 1 删除的所有数字中找到最大的一个数字，将它添加到你的 分数 中。
请你返回最后的 分数 。

示例 1：
输入：nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
输出：15
解释：第一步操作中，我们删除 7 ，6 ，6 和 3 ，将分数增加 7 。下一步操作中，删除 2 ，4 ，5 和 2 ，将分数增加 5 。最后删除 1 ，2 ，3 和 1 ，将分数增加 3 。所以总得分为 7 + 5 + 3 = 15 。

示例 2：
输入：nums = [[1]]
输出：1
解释：我们删除 1 并将分数增加 1 ，所以返回 1 。

 */

    @Test
    void t() {
        int[][] nums = {{7, 2, 1}, {6, 4, 2}, {6, 5, 3}, {3, 2, 1}};
        int res = matrixSum(nums);
        System.out.println("res = " + res);
    }

}
